package com.cg.design.graphicdesignpattern.visitor;

import java.util.Iterator;

/**
 * 本质上和Composite模式中Entry类一致，表示目录条目的抽象类，实现了Element接口，更适用于Visitor模式
 *
 * @program: LeetCode->Entry
 * @description: 本质上和Composite模式中Entry类一致，表示目录条目的抽象类，实现了Element接口，更适用于Visitor模式
 * @author: cg
 * @create: 2022-03-26 20:53
 **/
public abstract class Entry implements Element {
    /**
     * 获取条目名字的抽象方法
     *
     * @return
     */
    public abstract String getName();

    /**
     * 获取条目大小的抽象方法
     *
     * @return
     */
    public abstract int getSize();

    /**
     * 加入条目的方法，由子类实现，在Entry类中只是简单地抛出异常而已，当然还有别的实现方式
     *
     * @param entry 目录条目
     * @return
     * @throws com.cg.design.graphicdesignpattern.composite.FileTreatmentException 文件异常
     */
    public Entry add(Entry entry) throws FileTreatmentException {
        throw new FileTreatmentException();
    }

    /**
     * 生成迭代器
     *
     * @return
     * @throws com.cg.design.graphicdesignpattern.composite.FileTreatmentException 文件异常
     */
    public Iterator<Entry> iterator() throws FileTreatmentException {
        throw new FileTreatmentException();
    }

    @Override
    public String toString() {
        return getName() + " (" + getSize() + ")";
    }

}
